#include "Reactor.hpp"
#include "Listen.hpp"
#include "Logger.hpp"
#include "Calculator.hpp"
#include "Parser.hpp"


int main(int argc,char* argv[])
{
    EnableConsoleLogStrategy();

    //1.最上层功能计算模块
    std::unique_ptr<Cal> cal = std::make_unique<Cal>();

    //2.序列化与反序列化的解析模块
    std::unique_ptr<Parser> parser = std::make_unique<Parser>([&cal](Request& req){
        return cal->Exe(req);
    });

    //3.手动构建的listen套接字连接模块
    uint16_t port = std::stoi(argv[1]);
    std::shared_ptr<Connection> listen = std::make_shared<Listen>(port,[&parser](const std::string& json){
        return parser->Parse(json);
    });
    
    //4.借助epoll管理所有连接的反应堆模块
    Reactor reactor;
    reactor.AddConnection(listen);
    reactor.Run();
    return 0;
}